# THIS SOFTWARE IS A PART OF FREE COMPETITOR PROJECT
# THE FOLLOWING SOURCE CODE I UNDER THE GNU
# AGPL LICENSE V3 OR ANY LATER VERSION.

# This project is not for simple users, but for
# web-masters and a like, so we are counting on
# your ability to set it up and running.

import os
import sys
import json

from modules import missing

args = sys.argv

if "--help" in args or "-h" in args:
    print("""You can use the next commands after check.py

 -links     | Will skip checking the links

 --help     | Displays this help menu""")
    exit()

# TODO: Make a pull-request before starting

print("* Checking...")

# Check number one, list all missing software

try:
    with open("data/missing.json") as json_file:
        miss = json.load(json_file)
except:
    miss = {}

if miss:
    print()
    print("* Missing Software found! Please copy-paste the next")
    print("  section into our Missing Software Mega-Thread at: ")
    print("  https://notabug.org/jyamihud/FreeCompetitors/issues/25")
    print("===========================================================")
    print()

missing.List()

if miss:
    print()
    print("===========================================================")
    print()

# Part two. Checking for healthy links

import urllib.request
import urllib.error

error = False
def iferror():
    if not error:
        print()
        print(" * Some files in 'apps' folder have problems! Please")
        print("   copy-paste the next section into our Problems with")
        print("   Software Mega-Thread at: ")
        print("   https://notabug.org/jyamihud/FreeCompetitors/issues/24")
        print("===========================================================")
        print()
    return True

for f in os.listdir("apps"):
    if f.endswith(".json"):
        # Trying to read the file
        try:
            with open("apps/"+f) as json_file:
                app = json.load(json_file)
        except Exception as e:
            error = iferror()
            print(" - [ ] `apps/"+f+"` fails to load. Says: `"+str(e)+"`")
            continue

        # Links
        if not "-links" in args:
            for link in app.get("links",[]):
            
                # TODO: Make the tester of the links closer to the kind
                # of response that you will get in the web-browser.
            
                try:
                    urllib.request.urlopen(app.get("links",[])[link])
                except Exception as e:
                    if "403" not in str(e):
                        error = iferror()
                        print(" - [ ] `apps/"+f+"` "+link+" link doesn't seem to work.")

        # Licenses
        lices = app.get("licenses", [])
        try:
            with open("data/licenses.json") as json_file:
                ll = json.load(json_file)["licenses"]
        except:
            ll = {}
            
        for lic in lices:

            found = False
            for l in ll:
                if lic in [l.get("licenseId",""),l.get("name","")]:
                    found = True
            if not found:
                error = iferror()
                print(" - [ ] `apps/"+f+"` License '"+lic+"' is unknown.")
                
print()        
print("===========================================================")
print()
print("* Check is finished!")
print()
